function isPromise(fn) {
  return typeof fn.then === 'function';
}

// action.then返回的不是一个纯对象，所以这个中间件无法与其他中间件一起使用
// 这个中间件允许我们传递一个 Promise 对象作为 action，
// 然后会等 action 返回结果（一个真正的 action）之后，再进行 dispatch
const promiseMiddleware = ({ getState, dispatch }) => (next) => (action) => {
  return isPromise(action.num)
    ? action.num.then((d) => {
        dispatch({ ...action, num: d });
      })
    : next(action);
};

export default promiseMiddleware;
